package com.sojson.config.shutdown;

import java.util.List;

import javax.annotation.PreDestroy;

import org.springframework.stereotype.Component;

import com.sojson.util.SystemUtil;
import com.sojson.util.shutdown.CustomMethodShutdown;

import lombok.extern.slf4j.Slf4j;

/**
 * 应用程序关闭后的操作配置类</BR>
 * 注解实现,Spring相关,最后执行</BR>
 * 不能添加异步方法</BR>
 * 调用System.exit会失效,因为等于被立马强制中断了</BR>
 * 
 * @author liu
 * @date 2021-08-17
 */
@Slf4j
@Component
@SuppressWarnings("synthetic-access")
public class ShutdownAnnoConfig {

    public ShutdownAnnoConfig() {
        // 将任务添加到集合中
        SystemUtil.addShutdown(new CustomMethodShutdown() {
            @Override
            public void run() {
                log.info("程序正在关闭！");
            }
        });
    }

    /**
     * 运行所有任务
     */
    @PreDestroy
    public void shutdown() {
        log.info("开始执行应用程序自定义动态关闭操作！");

        List<CustomMethodShutdown> threadShutdown = SystemUtil.THREAD_SHUTDOWN;
        for (CustomMethodShutdown customMethodShutdown : threadShutdown) {
            customMethodShutdown.start();
        }

        log.info("应用程序自定义动态关闭操作执行完毕！");
    }

}